package org.common.utils.rpc.net;

import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.socket.SocketChannel;
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
import org.common.utils.net.netty.core.NettyDecode;
import org.common.utils.net.netty.core.NettyEncode;
import org.common.utils.net.netty.core.NettyHandler;
import org.common.utils.net.netty.core.NettyInitializer;

/**
 * RPC初始化器
 * @author zhouzhibing
 * @date 2025/11/16 17:55
 */

@ChannelHandler.Sharable
public class RpcNettyInitializer extends NettyInitializer {

    /**
     * RPC初始化器
     * @param name 名称，主要用于线程名称的定义。
     * @param encode 编码器
     * @param decode 解码器
     * @param handler 处理器
     */
    public RpcNettyInitializer(String name ,NettyEncode encode, NettyDecode decode, NettyHandler handler) {
        super(name ,encode, decode, handler);
    }

    @Override
    protected void initChannel(SocketChannel ch) throws Exception {
        ChannelPipeline pipeline = ch.pipeline();
        pipeline.addLast(new LengthFieldBasedFrameDecoder(5 * 1024 * 1024, 0, 4, 0, 0));
        pipeline.addLast(decode);
        pipeline.addLast(encode);
        pipeline.addLast(handler);
    }
}
